分为三个文件
一个 - LinkList_test.h 头文件,用于设定链表节点结构体,以及功能函数名称,存储内容结构体。
一个 - LinkList.cpp 文件,用于实现各类功能函数。
一个 - main.cpp 文件,用于运行。
IDE:CodeBlocks
LinkList.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| using namespace std;
struct Info //存储数据结构体 { int data; };
struct Node { Info val; Node *next; Node(Info x):val(x),next(NULL){} };
class LinkList { public: void Creat(); void InsertHead(Info val); void Insert(Info val,int pos); void Remove(Info val); int Length(); void Reverse(); int Find(Info val); void Print(); ~LinkList(); private: Node *head; int length; };
|
LinkList.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
| #include <stdio.h> #include <stdlib.h> #include <iostream> #include "LinkList_test.h" using namespace std;
void LinkList::Creat() { head = (Node *)malloc(sizeof(Node)); length = 10; Node *s; s = (Node *)malloc(sizeof(Node)); Node *q; q = (Node *)malloc(sizeof(Node)); Node *temp; s = head; head->next = q; for(int i=1; i<=length; ++i) { if(i == 1) { s->val.data = i; continue; } temp = (Node *)malloc(sizeof(Node)); temp->val.data = i; s->next = temp; s = temp; } temp->next = NULL; }
LinkList::~LinkList() { Node *temp; for(int i=0; i<length; ++i) { temp = head; head = head->next; delete temp; } }
int LinkList::Length() { return length; }
void LinkList::Insert(Info val,int pos) { Node *index = head; if(pos == 1) { Node *temp = new Node(val); temp->next = head; head = temp; length++; } if(pos > 1) { int i = 1; while(i < pos) { index = index->next; i++; } Node *temp = new Node(val); temp->next = index->next; index->next = temp; length++; }
}
int LinkList::Find(Info val) { Node *index = head; int pos = 1; while(index) { if(val.data == index->val.data) { cout<<"Find in No."<<pos<<endl; return pos; }
index = index->next; pos++; } return 0; }
void LinkList::Remove(Info val) { int pos = Find(val); if(pos) { Node *index = head; if(pos == 1 && length != 1) { head = head->next; delete index; length--; } if(pos != 1 && pos != length) { int i = 1; while(i < pos-1) { index = index->next; i++; } Node *temp = index->next; index->next = index->next->next; delete temp; length--; } if(pos == length) { int i = 1; while(i < pos-1) { index = index->next; i++; } delete index->next; index->next = NULL; length--;
} Remove(val); } else cout<<"已无此数据"<<endl; }
void LinkList::Reverse() { Node *q = head; Node *p = head->next; Node *temp = NULL; head-> next = NULL; while(p) { temp = p->next; p->next = q; q = p; p = temp; } head = q; }
void LinkList::Print() { Node *cursor = head; while(cursor) { cout<<cursor->val.data<<endl; cursor = cursor->next; } }
|
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<stdio.h> #include<stdlib.h> #include <iostream> #include <string> #include "LinkList_test.h" using namespace std;
int main() { LinkList head; head.Creat(); cout<<"The LinkedList is:"<<endl; head.Print();
Info val01; val01.data = 7;
cout<<"Insert test:"<<endl; head.Insert(val01,1); head.Print();
cout<<"reverse test:"<<endl; head.Reverse(); cout<<"reversed linklist is:"<<endl; head.Print();
cout<<"remove test:"<<endl; cout<<"the length of linklist is:"<<endl; cout<<head.Length()<<endl; head.Remove(val01); cout<<"after remove:"<<endl; head.Print(); return 0; }
|
参考博客:https://blog.csdn.net/kevin_zhai/article/details/50494020
但Kevin的博客中有部分代码有误